/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.gpstracking.DA;

import com.gpstracking.BE.*;
import com.gpstracking.Utils.Geometry.Point;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;

import java.util.Iterator;

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;

/**
 *
 * @author jmj
 */
public class DispositivoDA {

    public static List<Notificacion> getNotificaciones(DispositivoPosicion dispositivoPosicion) {
    	Session hbsession = HUtil.getSession();
    	Transaction tx = hbsession.beginTransaction();
		tx.begin();
    	Query query = hbsession.createQuery("FROM NotificacionDispositivo WHERE dispositivo.idDispositivo = " + dispositivoPosicion.getDispositivo().getIdDispositivo());
        
    	List<NotificacionDispositivo> notificacionDispositivos = (List<NotificacionDispositivo>) query.list(); 
    	
    	
        List<Notificacion> res = new ArrayList<Notificacion>();
        for( NotificacionDispositivo notificacionDispositivo : notificacionDispositivos){
        	Notificacion notificacion = notificacionDispositivo.getNotificacion();
        	res.add(  notificacion );
        }
        return res;
    }

    public static Point getPoint(DispositivoPosicion dispositivoPosicion) {
        
        return new Point( dispositivoPosicion.getLatitud(), dispositivoPosicion.getLongitud());
    }

    public static List<Dispositivo> getByProperty(String property, String value) {
    	Session hbsession = HUtil.getSession();
    	Transaction tx = hbsession.beginTransaction();
		tx.begin();
        Query query = hbsession.createQuery("FROM Dispositivo WHERE " + property + " = '" + value +"'");
        
        List<Dispositivo> res =  (List<Dispositivo>) query.list();
        
        
        return res;
        
        
    }

    public static Dispositivo get(int idDispositivo) {
    	Session hbsession = HUtil.getSession();
    	Transaction tx = hbsession.beginTransaction();
		tx.begin();
        Query query = hbsession.createQuery("FROM Dispositivo WHERE idDipositivo = "+ idDispositivo);
        System.out.println("FROM Dispositivo WHERE idDipositivo = "+ idDispositivo);
          List<Dispositivo> res =  (List<Dispositivo>) query.list();
        
        
        return res.isEmpty() ? null : res.get(0);
                
    }

    public static void update(Dispositivo dispositivo) {
    	Session hbsession = HUtil.getSession();
        Transaction tx = hbsession.beginTransaction();
        
        tx.begin();
        
        hbsession.update(dispositivo);
        
        tx.commit();
        
    }

    public static List<Dispositivo> getByListId(List<Integer> idDispositivos) {
    	Session hbsession = HUtil.getSession();
    	Transaction tx = hbsession.beginTransaction();
		tx.begin();
        List<Dispositivo> dispositivos = new ArrayList<Dispositivo> ();
        for( Integer id : idDispositivos){
            Query query = hbsession.createQuery("FROM Dispositivo WHERE idDispositivo = "+ id);
            List<Dispositivo> res =  (List<Dispositivo>) query.list();
            if ( res.isEmpty() ) continue;
            dispositivos.add( res.get(0) );
        }

        return dispositivos;
    }
    public static void save( Dispositivo dispositivo){
        Session hbsession = HUtil.getSessionFactory().openSession();
        Transaction tx = hbsession.beginTransaction();
        tx.begin();
        hbsession.save(dispositivo);
        tx.commit();
        
        
    }

	public static List<Dispositivo> getActivos(Usuario usuario) {
		Session hbsession = HUtil.getSession();
		Transaction tx = hbsession.beginTransaction();
		tx.begin();
        Query query = hbsession.createQuery("FROM Dispositivo WHERE usuario.idUsuario = :iduser AND estado = 'activo' ");
        query.setParameter( "iduser", usuario.getIdUsuario());
        List<Dispositivo> res =  (List<Dispositivo>) query.list();
        
        return res;
	}
	public static List<Dispositivo> getPendientes(Usuario usuario) {
		Session hbsession = HUtil.getSession();
		Transaction tx = hbsession.beginTransaction();
		tx.begin();
        Query query = hbsession.createQuery("FROM Dispositivo WHERE usuario.idUsuario = :iduser AND estado = 'pendiente' ");
        query.setParameter( "iduser", usuario.getIdUsuario());
        List<Dispositivo> res =  (List<Dispositivo>) query.list();
        
        return res;
	}
}
